home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 42
/
Amiga Format AFCD42 (Issue 126, Aug 1999).iso
/
-serious-
/
programming
/
amos
/
mazer
/
fastmazer.amos
/
fastmazer.amosSourceCode
< prev
next >
Wrap
AMOS Source Code
|
1999-05-17
|
2KB
|
76 lines
'This program creates mazes!
'
Dim MAZE(6,6),FLAGS(6,6)
For B=0 To 6
For A=0 To 6
FLAGS(A,B)=15
Next
Next
For A=0 To 6
Add FLAGS(A,0),-1 : Rem No N exit on N row
Add FLAGS(6,A),-2 : Rem No E exit on E row
Add FLAGS(A,6),-4 : Rem No S exit on S row
Add FLAGS(0,A),-8 : Rem No W exit on W row
Next
Dim DIX(3),DIY(3)
DIY(0)=-1 : DIX(1)=1 : DIY(2)=1 : DIX(3)=-1
'
'Here we go...
'
Randomize Timer
Print : Input "How many mazes? ";MZ
'
If Exist("Mazes")
Append 1,"Mazes"
Else
Open Out 1,"Mazes"
End If
'
GO1:
For A=0 To 6 : For B=0 To 6 : MAZE(A,B)=0 : Next : Next
'
'Start position
'
X=Rnd(6) : Y=Rnd(6) : VISITED=0
'
Do
If VISITED=48 Then Goto SLUTT
'
DI=Rnd(3) : OD=DI : D$=""
'Build list of exits
For T=1 To 4 : P2=2^DI
If(FLAGS(X,Y) and P2)=P2
If MAZE(X+DIX(DI),Y+DIY(DI))=0
D$=D$+Chr$(DI+64)
End If
End If
Add DI,1,0 To 3
Next
If D$>""
'Pick and move
DI=Asc(D$)-64 : P2=2^DI
MAZE(X,Y)=MAZE(X,Y) or P2
Add X,DIX(DI) : Add Y,DIY(DI)
DI=(DI+2) and 3
MAZE(X,Y)=MAZE(X,Y) or(2^DI)
Inc VISITED
Else
'Scan for used room
Repeat
Add X,1,0 To 6
If X=0 : Add Y,1,0 To 6 : End If
Until MAZE(X,Y)>0
End If
Loop
'
SLUTT:
'
'Store the maze and go back for another
'
For B=0 To 6 : For A=0 To 6
Print #1,Chr$(MAZE(A,B)+64);
Next : Next
Print #1,""
Dec MZ : Print Using "#####";MZ;Cup$
If MZ>0 Then Goto GO1
Close